package main

import (

	"fmt"
	"math"
)

type triaerror struct {
	msg string
	a,b,c float64
}


func (t triaerror) Error() string  { //打印输出信息，返回的是error对象的string类型
	return fmt.Sprintf("斜边%.2f，直边%.2f，底边%.2f,错误提示：%s",t.a,t.b,t.c,t.msg)
}


func (t triaerror) area(a,b,c float64) (float64,error)  {
	//判断是否输入了错误值
	errmsg:="" //先给错误信息一个空值
	if a<=0 {
		errmsg ="斜边a不能小于等于零"
	}
	if b<=0 {
		if errmsg==""{
			errmsg="直边b不能小于等于零"
		}else {
			errmsg+=",直边b也不能小于等于零"
		}
	}
	if c<=0 {
		if errmsg==""{
			errmsg="底边c不能小于等于0"
		}else{
			errmsg+=",底边c也不能小于等于0"
		}
	}
	//判断错误的信息
	if errmsg!=""{
		return 0,&triaerror{errmsg,a,b,c}
	}
	p:=t.peri()/2
	area:=math.Sqrt(p*(p-t.a)*(p-t.b)*(p-t.c))
	return area,nil

}
func (t triaerror) peri()float64  {
	return t.a+t.b+t.c
}

func main()  {
	t1:=triaerror{"",3,4,5}
	fmt.Println(t1.area(t1.a,t1.b,t1.c))
}
